package cn.xique.module.weixin.web.page;

import cn.xique.module.weixin.web.IbeanBaseController;
import com.jfinal.core.paragetter.Para;
import com.jfinal.json.FastJson;
import com.jfinal.kit.HttpKit;
import com.jfinal.kit.Ret;
import com.jfinal.weixin.sdk.api.ApiResult;
import com.jfinal.weixin.sdk.api.shakearound.ShakeAroundPageApi;

import io.jboot.web.controller.JbootController;
import io.jboot.web.controller.annotation.RequestMapping;
import io.jpress.module.ibeacon.model.IbeaconPage;
import org.json.JSONObject;

import static io.jboot.web.JbootRequestContext.getRequest;

@RequestMapping("/Page")
public class PageController extends IbeanBaseController {


    /**
     * ---------------------------------新增素材--------------------------------------
     新增摇一摇出来的页面信息，包括在摇一摇页面出现的主标题、副标题、图片和点击进去的超链接。
     其中，图片必须为用素材管理接口上传至微信侧服务器后返回的链接。
     参数要求 application/json
     //         @param title 在摇一摇页面展示的主标题，不超过6个汉字或12个英文字母
     //         @param pageUrl 页面地址
     //         @param description 在摇一摇页面展示的副标题，不超过7个汉字或14个英文字母
     //         @param iconUrl 在摇一摇页面展示的图片。图片需先上传至微信侧服务器，用“素材管理-上传图片素材”接口上传图片，返回的图片URL再配置在此处
     @return ApiResult
     */
    public void AddPage(){
        String jsonString = HttpKit.readData(getRequest());
        IbeaconPage page = FastJson.getJson().parse(jsonString, IbeaconPage.class);

        ApiResult result =  ShakeAroundPageApi.addPage(page.getTitle(),page.getPageurl(), page.getDescription(), page.getIconurl());
        /**
        * {
           "data": {
               "page_id": 28840
           }
           "errcode": 0,
           "errmsg": "success."
        }
        * */
        if(result.isSucceed()){
            JSONObject jsonObject = new JSONObject(result.getJson());
            page.setPageid(jsonObject.getJSONObject("data").getInt("page_id"));
            page.save();
        }
        renderJson(Ret.ok().set("success", true).set("result", result));

    }

    /**
     * ---------------------------------更新页面--------------------------------------
     新增摇一摇出来的页面信息，包括在摇一摇页面出现的主标题、副标题、图片和点击进去的超链接。
     其中，图片必须为用素材管理接口上传至微信侧服务器后返回的链接。

        参数要求 application/json
//     @param pageId 摇周边页面唯一ID
//     @param title 在摇一摇页面展示的主标题，不超过6个汉字或12个英文字母
//     @param pageUrl 页面地址
//     @param description 在摇一摇页面展示的副标题，不超过7个汉字或14个英文字母
//     @param iconUrl 在摇一摇页面展示的图片。图片需先上传至微信侧服务器，用“素材管理-上传图片素材”接口上传图片，返回的图片URL再配置在此处
//     @param comment 页面的备注信息，不超过15个汉字或30个英文字母
     @return ApiResult
     */
    public void UpdatePage(){

        String jsonString = HttpKit.readData(getRequest());
        IbeaconPage page = FastJson.getJson().parse(jsonString, IbeaconPage.class);


        //(int pageId, String title, String pageUrl, String description, String comment, String iconUrl)
        ApiResult result =  ShakeAroundPageApi.updatePage(page.getPageid(), page.getTitle(),page.getPageurl(), page.getDescription(), page.getIconurl());
        if(result.isSucceed()){
            page.update();
        }
        renderJson(Ret.ok().set("success", true).set("result", result));

    }


    /**
     * ---------------------------------查看页面--------------------------------------
     查询已有的页面，包括在摇一摇页面出现的主标题、副标题、图片和点击进去的超链接。
     批量拉取页面列表。
     @param pageIds 定页面ID查询
     @return ApiResult
     */
    public void SearchPage2(@Para("ids") int[] pageIds){

         ApiResult apiResult = ShakeAroundPageApi.searchByIds(pageIds);
         renderJson(Ret.ok().set("success", true).set("result", apiResult));

    }

    /**
     * ---------------------------------查看页面--------------------------------------
     查询已有的页面，包括在摇一摇页面出现的主标题、副标题、图片和点击进去的超链接。
     批量拉取页面列表。
     @param begin 页面列表的起始索引值；
     @param count 待查询的页面数量，不能超过50个；
     @return ApiResult
     */
    public void SearchPage(@Para("begin") int begin, @Para("count") int count){
        ApiResult apiResult = ShakeAroundPageApi.searchPage( begin,  count);
        renderJson(Ret.ok().set("success", true).set("result", apiResult));

    }

    /**
     * ---------------------------------删除页面--------------------------------------
     删除已有的页面，包括在摇一摇页面出现的主标题、副标题、图片和点击进去的超链接。
     只有页面与设备没有关联关系时，才可被删除。

     @param pageId 指定页面的id
     @return ApiResult
     */
    public void SearchPage3( @Para("pageId") int pageId){
        ApiResult apiResult = ShakeAroundPageApi.deletePage(pageId);
        renderJson(Ret.ok().set("success", true).set("result", apiResult));

    }


}
